# coding : UTF-8
"""
author：BingBO   time：2023.05.04
Theme：
notes：
"""
import cv2
import os
import openpyxl
# from weldTypes import weldTypes
import xlwt  # xlwt模块只能写xls文件，不能写xlsx文件(写xlsx程序不会报错，但最后文件无法直接打开，会报错)


def on_EVENT_LBUTTONDOWN(event, x, y, flags, param):
    if event == cv2.EVENT_LBUTTONDOWN:
        coorText = "(%d,%d)" % (x, y)
        rows = sheet.max_row  # 获取行数    <class 'int'>
        print(str(rows))
        print(type(str(rows)))
        # column = sheet.max_column  # 获取列数
        if param == 1:
            x = "C"
        if param == 2:
            x = "D"
        if param == 3:
            x = "E"
        if param == 4:
            x = "F"
        exl = x + str(rows)  # <class 'str'>
        sheet[exl] = coorText  # 列，行
        param += 1
        print("param:", param)
        cv2.circle(img, (x, y), 1, (255, 0, 255), thickness=-1)
        cv2.circle(img, (x, y), 5, (255, 0, 255), thickness=1)
        cv2.putText(img, coorText, (x, y), cv2.FONT_HERSHEY_PLAIN, 1.0, (0, 255, 255), thickness=1)


Path = r'F:\MVS_Data\V_test'
# 分割路径和文件名
(path, TYPE) = os.path.split(Path)  # (path, filename) = os.path.split(Path)
print("TYPE:", TYPE)  # 也是类型名

# 判断文件是否存在
if os.path.exists(Path + '.xlsx'):
    print("文件" + TYPE + '.xlsx' + "已存在")
else:
    # 新建一个工作簿
    path = r"F:\MVS_Data"
    os.chdir(path)  # 修改工作路径
    workbook = openpyxl.Workbook()  # 新建一个工作簿
    sheet = workbook.active  # 获取活动表
    sheet.title = TYPE
    sheet['A1'] = '子目录路径'
    sheet['B1'] = '文件名'
    sheet['C1'] = 'laser1_P1'
    sheet['D1'] = 'laser1_P2'
    sheet['E1'] = 'laser2_P1'
    sheet['F1'] = 'laser2_P2'
    workbook.save(TYPE + '.xlsx')  # 保存文件
    print("创建新文件：" + TYPE + '.xlsx')
print("================================================")

# 加载创建的表格
path = r"F:\MVS_Data"
os.chdir(path)  # 修改工作路径
workbook = openpyxl.load_workbook(TYPE + '.xlsx')
sheet = workbook.active  # 获取活动表
print('当前活动表是：' + str(sheet))

# 返回元组：当前文件夹路径、子目录列表、子文件列表
for root, dirs, files in os.walk(Path):
    print("root:", root)  # 首先打印指定目录，然后再输出指定目录中 子目录
    print("该目录下子目录列表 dirs:", dirs)
    print("该目录下的文件files", files)
    # 只输出子目录中的文件 的绝对路径
    if len(dirs) == 0 and len(files) != 0:
        idx = 0
        for filename in files:
            # 首先插入 目录名 、文件名
            if idx == 0:
                sheet.append([root, filename])  # 使用append插入数据
            else:
                sheet.append(['', filename])
            AP = os.path.join(root, filename)  # <class 'str'>
            img = cv2.imread(AP)
            img = cv2.resize(img, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_CUBIC)
            cv2.namedWindow(AP)
            # 点击图片的4个特征点，并保存到excel表格
            num = 1
            cv2.setMouseCallback(AP, on_EVENT_LBUTTONDOWN, num)  # 对AP这个窗口内进行鼠标回调
            # 一直显示图片，在此期间，在图片上触发任意次的 回调函数，直到按下ESC键
            while 1:
                cv2.imshow(AP, img)
                num += 1
                print(num)
                if cv2.waitKey(20) & 0xFF == 27:
                    break
            cv2.destroyAllWindows()
            idx += 1
            print("done:    ", AP)
    print("================================================")
